<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Filter</title>
</head>
<body>
<h3>Filter的作用</h3>
<ul>
    <li>围绕 Servlet 执行统一操作，抽取相同代码</li>
</ul>

<h3>Filter三要素</h3>
<ul>
    <li>拦截</li>
    <li>过滤</li>
    <li>放行</li>
</ul>

<h3>Filter Hello World</h3>
<a href="/public/ResServlet01">公共资源 01</a><br/><br/>
<a href="/public/ResServlet02">公共资源 02</a><br/><br/>
<a href="/private/ResServlet03">私密资源 01</a><br/><br/>
<a href="/private/ResServlet04">私密资源 02</a><br/><br/>
<a href="/private/ResServlet05">私密资源 03</a><br/><br/>

<h3>Filter生命周期</h3>
<ul>
    <li>【创建对象】默认：在容器启动时创建对象</li>
    <li>【初始化】创建对象后初始化</li>
    <li>【干活】拦截到请求后调用 doFilter() 方法执行过滤逻辑</li>
    <li>【清理】Web 应用卸载前执行 destroy() 方法</li>
</ul>

<h3>Filter链</h3>
<ul>
    <li>概念：拦截相同资源的多个 Filter 会构成一个执行链条</li>
    <li>执行顺序：嵌套</li>
    <ul>
        <li>web.xml中filter-mapping在前的 Filter 在外层</li>
        <li>web.xml中filter-mapping在后的 Filter 在内层</li>
    </ul>
</ul>

<h3>@WebFilter注解</h3>
<p>基于注解配置 Filter 如果形成 Filter 链，那么 Filter 链中每一个 Filter 执行顺序无法精确指定</p>
</body>
</html>
